package com.tojabo.swing.fourteen_table;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;

public class AbstractTableModelDemo1 {
	public AbstractTableModelDemo1() {
		JFrame f = new JFrame();
		MyTable mt = new MyTable();
		JTable t = new JTable(mt);
		t.setPreferredScrollableViewportSize(new Dimension(550, 30));
		JScrollPane s = new JScrollPane(t);
		f.getContentPane().add(s, BorderLayout.CENTER);
		f.setTitle("表格模型的创建实例");
		f.pack();
		f.setVisible(true);
		f.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});
	}

	public static void main(String args[]) {

		new AbstractTableModelDemo1();
	}
}

class MyTable extends AbstractTableModel {// 创建一个类MyTable，它是继承AbstractTableModel类的，在这个类中通过实现“getRowCount()”、“getColumnCount()”、“getValueAt()”这三个方法。
	Object[][] p = {
			{ "王鹏", new Integer(91), new Integer(1949), new Integer(1910) },
			{ "朱雪莲", new Integer(82), new Integer(1969), new Integer(1510) },
			{ "梅庭", new Integer(47), new Integer(1957), new Integer(1040) },
			{ "赵龙", new Integer(61), new Integer(1957), new Integer(1180) },
			{ "李兵", new Integer(90), new Integer(1987), new Integer(1770) }, };
	String[] n = { "姓名", "工号", "出生年月", "薪水" };

	public int getColumnCount()// 此方法是返回该模型中的列数
	{
		return n.length;
	}

	public int getRowCount()// 此方法是返回该模型中的行数
	{
		return p.length;
	}

	public String getColumnName(int col) // 此方法是返回 col 位置的列的名称
	{
		return n[col];
	}

	public Object getValueAt(int row, int col) // 此方法是返回row和col的单元格的值
	{
		return p[row][col];
	}

	public Class getColumnClass(int c) // 此方法是针对列中所有的单元格值，返回最具体的超类
	{
		return getValueAt(0, c).getClass();
	}
}
